from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools import tool
from typing import List
from agno.tools.function import UserInputField


# 你可以指定 user_input_fields 或留空以由用户提供所有字段
@tool(requires_user_input=True, user_input_fields=["to_address"])
def send_email(subject: str, body: str, to_address: str) -> str:
    """
    发送电子邮件。

    Args:
        subject (str): 邮件主题。
        body (str): 邮件正文。
        to_address (str): 收件人地址。
    """
    return f"已发送邮件到 {to_address}，主题为 {subject}，正文为 {body}"

agent = Agent(
    model=OpenAIChat(
        id="qwen3",
        base_url="http://xai.dyg.com.cn/v1",
        api_key="dyg-y2fyntVOODsN7a1iNUgqjfh6dcBMfpciZWhn4KGJ1x8",
    ),
    tools=[send_email],
    markdown=True
)

run_response = agent.run("发送一封主题为 'Hello' 正文为 'Hello, world!' 的邮件")
if run_response.is_paused:
    for tool in run_response.tools_requiring_user_input:
        input_schema: List[UserInputField] = tool.user_input_schema

        for field in input_schema:
            # 向用户显示字段信息
            print(f"\n字段: {field.name} ({field.field_type.__name__}) -> {field.description}")

            # 获取用户输入（如果值未设置，表示需要用户提供该值）
            if field.value is None:
                user_value = input(f"请输入 {field.name} 的值: ")
                field.value = user_value
            else:
                print(f"代理提供的值: {field.value}")

    run_response = (
        agent.continue_run(run_response=run_response)
    )